﻿// ==++==
// 
//   Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// ==--==

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Pex.Graphs;
using Microsoft.Pex.Engine.ComponentModel;
using Microsoft.Pex.Engine.ExecutionNodes;
using Microsoft.Pex.Engine.Comprehensions;
using Microsoft.ExtendedReflection.Utilities.Safe.Diagnostics;
using Microsoft.ExtendedReflection.Interpretation;
using Microsoft.ExtendedReflection.Reasoning.ExecutionNodes;
using Microsoft.ExtendedReflection.ComponentModel;
using Microsoft.ExtendedReflection.Utilities.Safe;
using Microsoft.Pex.Fitness.Interfaces;
using Microsoft.Pex.Fitness.Implementation;

namespace Microsoft.Pex.Fitness
{
    [__DoNotInstrument]
    public sealed partial class PexFitnessSearchGraphAttribute
        : SearchGraphAttribute
    {
        protected override SearchGraphBuilder CreateGraphBuilder(
            IPexExplorationComponent host,
            IVisualExecutionGraph visualExecutionGraph)
        {
            SafeDebug.AssumeNotNull(host, "host");
            SafeDebug.AssumeNotNull(visualExecutionGraph, "visualExecutionGraph");

            var builder = new PexFitnessSearchGraphBuilder(
                this,
                host,
                visualExecutionGraph
                );
            return builder;
        }
    }
}
